package com.bpvse;

import com.util.AES_EUnit;
import com.util.DataUnit;
import com.util.F1Unit;
import com.util.StoreUnit;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;


//获得一个关键字的多个版本对应的多个文件搜索的结果
public class DecryptionListTest {



    public static void Decryption(byte[] Message, int[] outputlen, byte[] ckey, List<byte[]> resultList, int resultLen, int[] aRlen, List<byte[]> aVer, int averLen, byte[] keyword, int wordLen) {
        byte[] tmp = new byte[DataUnit.HASH_LEN];
        byte[] sk = new byte[DataUnit.HASH_LEN];
        byte[] strV = new byte[DataUnit.HASH_LEN];
        int index = 0;
        int count= resultLen;    //



        //获得不同的版本
        for (int i = 0; i < averLen; i++) {

            //找到版本对应的索引(从第一个版本开始)
            int sum = StoreUnit.RN.get(i);
            count = count-sum; //准备指向当前版本的第一个索引

            //通过版本号找到对应的信息
            System.arraycopy(aVer.get(i), 0, strV, 0, DataUnit.HASH_LEN);
            System.out.println("版本信息的内容:"+ Base64.getEncoder().encodeToString(aVer.get(i)));

            //通过版本信息计算状态值
            F1Unit.F1(sk, keyword, wordLen, strV, ckey, 2);
            System.out.println("sk的内容是"+Arrays.toString(sk));

            StoreUnit.MR.put(i,new ArrayList<>());
            for (int j = 0; j < aRlen[i]; j++) {   //每个版本文件搜索对应的个数
                System.out.println("文件索引结果是:"+Arrays.toString(resultList.get(count)));
                System.arraycopy(resultList.get(count++), 0, tmp, 0, DataUnit.HASH_LEN);
                byte[] decryptedMessage = new byte[DataUnit.HASH_LEN];
                AES_EUnit.AES_D(decryptedMessage, 0, tmp, sk,DataUnit.HASH_LEN);
                System.out.println("message的内容是"+ Arrays.toString(decryptedMessage));
                StoreUnit.MR.get(i).add(decryptedMessage);
            }
            count = count-sum; //准备指向前一版本的最后一个索引
            index += aRlen[i] * DataUnit.HASH_LEN;
        }
        outputlen[0] = index;
    }
}
